package com.atguigu.liskov;

/**
 * 里氏替换原则 问题代码示例
 */
public class Liskov {
    public static void main(String[] args) {
        A a = new A();
        System.out.println("11-3=" + a.fun1(11, 3));
        System.out.println("1-8=" + a.fun1(1, 8));
        System.out.println("========================");

        B b = new B();
        System.out.println("11-3=" + b.fun1(11, 3)); //本意求出11-3
        System.out.println("1-8=" + b.fun1(1, 8)); //本意求出1-8
        System.out.println("11+3+9=" + b.fun2(11, 3));
    }
}

/**
 * A类有个方法fun1, 返回两个数的差
 */
class A {
    public int fun1(int num1, int num2) {
        return num1 - num2;
    }
}

/**
 * B类继承了A类
 * 增加了一个新方法, 把两个数相加 ,然后和9求和
 */
class B extends A {
    /**
     * 不小心重写了A类的方法,可能导致调用的时候出现问题
     *
     * @param num1 parm1
     * @param num2 parm2
     * @return parm1+parm2
     */
    @Override
    public int fun1(int num1, int num2) {
        return num1 + num2;
    }

    public int fun2(int num1, int num2) {
        return fun1(num1, num2) + 9;
    }
}
